 package com.bitoon.basketdudes.web;

 import com.bitoon.basketdudes.web.jpa.*;
import com.bitoon.web.utils.LocalizedText;
import java.util.*;
import javax.persistence.*;
import org.apache.log4j.Logger;

public class DetalleManager extends BaseAction {

    private String  nickManager;
    private Usuario manager;
    private List<Equipo> listaEquiposManager;

    private Logger log = Logger.getLogger(DetalleManager.class);

    @Override
    public String execute() {
        String retorno = SUCCESS;

        Usuario user_manager = consultaManager(getNickManager());
        if (user_manager == null) {
            retorno = NOT_FOUND;
        } else {
            retorno = SUCCESS;
            this.setManager(user_manager);
            this.setListaEquiposManager(user_manager.getEquipos());
        }

        return retorno;
    }

    public List<ArmarioEquipo> getArmarioEquipo(int idEquipo) {
        EntityManager em = null;
        List<ArmarioEquipo> listaArmarios = null;

        try {
            em = emfBasket.createEntityManager(); // checked

            Query q  = em.createNamedQuery("ArmarioEquipo.findByEquipoId");
            q.setParameter("equipoId", idEquipo);
            listaArmarios = (List<ArmarioEquipo>)q.getResultList();
            
            if(listaArmarios.isEmpty()){
                listaArmarios = null;
            }

        } catch (NoResultException e) {
            log.debug("[getArmarioEquipo][armario del equipo " + idEquipo + " no encontrado]");
        } catch (Exception e) {
            log.error("[getArmarioEquipo]: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return listaArmarios;
    }

    public String getTextoObjeto(String tipo, String key) {

        String retorno = "xx-xx";

        log.debug("pidiendo texto objeto: " + tipo + "," + key);

        if (tipo.equals("tipo")) {
            retorno = LocalizedText.getInstance().getTipoObjeto(idioma, key);
        } else if (tipo.equals("nombre")) {
            retorno = LocalizedText.getInstance().getNombreObjeto(idioma, key);
        } else if (tipo.equals("descripcion")) {
            retorno = LocalizedText.getInstance().getDescripcionObjeto(idioma, key);
        } else if (tipo.equals("caracteristica")) {
            retorno = LocalizedText.getInstance().getNombreCaracteristica(idioma, key);
        }

        return retorno;

    }

    public List<CartaEquipo> getCartasEquipo(int idEquipo) {
        EntityManager em = null;
        List<CartaEquipo> listaCartas = null;

        try {
            em = emfBasket.createEntityManager(); // checked

            log.debug("Equipo_id: "+idEquipo);

            Query q  = em.createNamedQuery("CartaEquipo.findByEquipoIdGroupByMcartaId");
            q.setParameter("equipoId", idEquipo);

            listaCartas = (List<CartaEquipo>)q.getResultList();

            if(listaCartas.isEmpty()){
                listaCartas = null;
            }
        } catch (NoResultException e) {
            log.debug("[getCartasEquipo][armario del equipo " + idEquipo + " no encontrado]");
        } catch (Exception e) {
            log.error("[getCartasEquipo]: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return listaCartas;
    }
   
    public Usuario consultaManager(String nick) {
        EntityManager em = null;
        Usuario user_manager = null;

        try {
            em = emfBasket.createEntityManager(); // checked
            Query q;

            if (configuracionGeneral.get("links.type").equals("nick")) {
                q  = em.createNamedQuery("Usuario.findByNick");
                q.setParameter("nick", nick.toLowerCase());
            } else {
                // Por defecto, id
                q = em.createNamedQuery("Usuario.findById");
                q.setParameter("id", Integer.parseInt(nick));
            }

            user_manager = (Usuario)q.getSingleResult();
        } catch (NoResultException e) {
            log.debug("[consultaManager][usuario " + getNickManager() + " no encontrado]");
        } catch (Exception e) {
            log.error("[consultaManager]: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return user_manager;
    }

    public String getArmario(String idEquipo){

        return "hola";
    }


    public void setNickManager(String nick) {
        this.nickManager = nick;
    }

    public String getNickManager() {
        return this.nickManager;
    }

    public Usuario getManager() {
        return manager;
    }

    public void setManager(Usuario manager) {
        this.manager = manager;
    }

    public List<Equipo> getListaEquiposManager() {
        return listaEquiposManager;
    }

    public void setListaEquiposManager(List<Equipo> listaEquiposManager) {
        this.listaEquiposManager = listaEquiposManager;
    }

    public List<Integer> getListaAnyos() {
        List<Integer> retorno = new ArrayList();
        GregorianCalendar gc = new GregorianCalendar();

        for(int x=gc.get(GregorianCalendar.YEAR); x>gc.get(GregorianCalendar.YEAR)-100; x--) {
            retorno.add(x);
        }

        return retorno;
    }

}


